package com.shoulder.boot.system.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.shoulder.core.utils.CharacterUtils;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 代码构建实体
 *
 * @author 596767880@qq.com
 * @since 2024-01-26 11:32:22
 */
@Data
public class GenerateDTO {

    public static final String MODEL_PREVIEW = "ov";
    public static final String MODEL_CREATE_FILE = "cf";
    /**
     * 模块id
     */
    @NotEmpty(message = "模块不能为空")
    private String moduleId;
    /**
     * 表名
     */
    @NotEmpty(message = "表名不能为空")
    private String tableName;
    /**
     * 表备注
     */
    private String comment;

    /**
     * 实体名
     */
    private String className;
    /**
     * 表引擎
     */
    @NotEmpty(message = "引擎不能为空")
    private String engine;
    /**
     * 表备注
     */
    @NotEmpty(message = "编码不能为空")
    private String charset;
    /**
     * 后端文件
     */
    private List<String> backends;
    /**
     * 前端文件
     */
    private List<String> fronts;
    /**
     * 作者
     */
    private String author;

    /**
     * 模式 ov:仅预览 cf：生成文件
     */
    private String model;
    /**
     * 字段列表
     */
    @NotEmpty(message = "字段不能为空")
    private List<FieldTO> fieldList;

    @JsonIgnore
    private String packageName;

    @JsonIgnore
    private String createTime;

    @JsonIgnore
    private String code;

    public String buildClassName() {
        if (StringUtils.hasText(className)) {
            return className;
        }
        return CharacterUtils.upperFirst(CharacterUtils.underscoreToCamelCase(this.tableName));
    }

    public static void toBean(GenerateDTO dto) {
        dto.setClassName(dto.buildClassName());
    }
}
